package com.example.zhidao.utils;

import com.example.zhidao.model.po.Admin;
import com.example.zhidao.model.po.User;
import io.jsonwebtoken.*;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class Ujwt {

    //生成token
    public  String  getoken(User user) {
        //Jwts.builder()生成
        //Jwts.parser()验证
        JwtBuilder jwtBuilder =  Jwts.builder()
                .setId(user.getId()+"")
                .setSubject(user.getUsername())    //用户名
                .setIssuedAt(new Date())//登录时间
                .signWith(SignatureAlgorithm.HS256, "wjx-w").setExpiration(new Date(new
                        Date().getTime()+86400000));
        //设置过期时间
        //前三个为载荷playload 最后一个为头部 header
        System.out.println(jwtBuilder.compact());
        return  jwtBuilder.compact();
    }

//    生成token(后台)
    public String gettoken1(Admin admin){
        //Jwts.builder()生成
        //Jwts.parser()验证
        JwtBuilder jwtBuilder =  Jwts.builder()
                .setId(admin.getId()+"")
                .setSubject(admin.getName())    //用户名
                .setIssuedAt(new Date())//登录时间
                .signWith(SignatureAlgorithm.HS256, "wjx-w").setExpiration(new Date(new
                        Date().getTime()+86400000));
        //设置过期时间
        //前三个为载荷playload 最后一个为头部 header
        System.out.println(jwtBuilder.compact());
        return  jwtBuilder.compact();
    }


//    解出token
    public  Object tokenToOut(String token) {
        System.out.println(token);
//        先去解出token
        try{
            Claims claims = Jwts.parser()
                    .setSigningKey("wjx-w")
                    .parseClaimsJws(token)
                    .getBody();
            Date date=new Date();
//        System.out.println(claims.getExpiration().before(date));
            System.out.println("用户角色:"+claims.get("role"));

//        判断是否过期 before（早于）现在的时间（早于就过期了）  提醒用户需要进行重新登录

                return claims;

        }
        catch (ExpiredJwtException e){//ExpiredJwtException  jwt时间过期的函数
            return "overdue";
        }catch (Exception e){
            return null;
        }


    }
}
